function addEvent(el, type, fn) {
  if(el.addEventListener) {
    el.addEventListener(type, fn, false);
  }else if(el.attachEvent) {
    // IE中的attachEvent接收的事件类型前加 'on'
    // fn中的this指向window
    el.attachEvent('on' + type, function() {
      fn.call(el);
    });
  }else {
    // 兼容性最好的句柄事件处理函数
    el['on' + type] = fn;
  }
}

function getScrollOffset() {
  if(window.pageXOffset) { // 该方法在IE9以下不支持
    return {
      left: window.pageXOffset,
      top: window.pageYOffset
    }
  }else {
    return { // 在chrome中他俩必定有一个为0，所以就相加
      left: document.body.scrollLeft + document.documentElement.scrollLeft,
      top: document.body.scrollTop + document.documentElement.scrollTop
    }
  }
}

function getViewportSize() {
  if(window.innerWidth) {
    return {
      width: window.innerWidth,
      height: window.innerHeight
    }
  }else {
    // 如果是IE的怪异模式
    if(document.compatMode === 'BackCompat') {
      return {
        width: document.body.clientWidth,
        height: document.body.clientHeight
      }
    // 是标准模式 CSS1Compat
    }else {
      return {
        width: document.documentElement.clientWidth,
        height: document.documentElement.clientHeight
      }
    }
  }
}

function getScrollSize () {
  if(document.body.scrollWidth) {
    return {
      width: document.body.scrollWidth,
      height: document.body.scrollHeight
    }
  }else {
    return {
      width: document.documentElement.scrollWidth,
      height: document.documentElement.scrollHeight
    }
  }
}